/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-5-4 下午12:08 Created by dwzhang
 */
package com.jade.bss.business.order;

import com.jade.bss.base.BssException;
import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;
import com.jade.framework.base.util.Parameters;

/**
 * 订单数据访问接口。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-5-4 下午12:08
 */
public interface OrderDao
{
    /**
     * 添加订单。
     *
     * @param order 订单对象
     * @throws com.jade.bss.base.BssException 处理异常。
     */
    public void add(Order order)
            throws BssException;

    /**
     * 更新订单信息。
     *
     * @param order 订单对象
     * @throws BssException 处理异常。
     */
    public void update(Order order)
            throws BssException;

    /**
     * 删除订单信息。
     *
     * @param order 订单信息。
     * @throws BssException 处理异常。
     */
    public void remove(Order order)
            throws BssException;

    /**
     * 获取订单详情。
     *
     * @param id 订单标识。
     * @return 订单对象
     * @throws BssException 处理异常。
     */
    public Order get(long id)
            throws BssException;

    /**
     * 查询客户订单信息。为了cache做的冗余，不影响其他人的订单列表。
     *
     * @param customerId 客户标识
     * @param criteria 查询条件
     * @return 订单列表。
     */
    public PagingList<Order> query(long customerId, Criteria criteria);

    /**
     * 查询订单信息。
     *
     * @param criteria 订单查询条件
     * @return 订单列表
     */
    public PagingList<Order> query(Criteria criteria);

    /**
     * 更新内容指定的参数。
     *
     * @param order 订单
     * @param params 需要更改的参数
     * @param statuses 记录匹配的状态，仅针对指定的状态进行变更。
     * @return 更新的记录数量
     * @throws BssException 处理异常。
     */
    public int update(Order order, Parameters params, int[] statuses)
            throws BssException;

    /**
     * 修改订单状态
     * @param orderId
     * @param orderStatus
     */
    public void updateOrderStatus(long orderId, int orderStatus, double tradePrice);
}
